package com.demo.java.OD501_550.OD542;

import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【园区参观路径(C卷-100分)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146513057
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        // 读取矩阵的维度
        int n = in.nextInt(); // 行数
        int m = in.nextInt(); // 列数

        // 初始化矩阵和dp数组
        int[][] matrix = new int[n][m];
        int[][] dp = new int[n + 1][m + 1];

        // 读取矩阵数据
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < m; j++) {
                matrix[i][j] = in.nextInt();
            }
        }

        // 初始化dp数组
        for (int i = 0; i < n + 1; i++) {
            for (int j = 0; j < m + 1; j++) {
                dp[i][j] = 0;
            }
        }

        // 起点的路径数为1
        dp[0][1] = 1;

        // 动态规划填充dp数组
        for (int i = 1; i < n + 1; i++) {
            for (int j = 1; j < m + 1; j++) {
                // 如果当前格子是可通过的
                if (matrix[i - 1][j - 1] == 0) {
                    // 从上方和左方的路径数相加
                    dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
                }
            }
        }

        // 输出到达终点的路径数
        System.out.println(dp[n][m]);
    }
}